﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using BussinessLogicTecnoPez;
using BussinessLogicTecnoPez.Produccion.Compras;
using BussinessLogicTecnoPez.Tipos_Comunes;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;
using Tecnopez.Globals;
using System.Collections.Generic;
using Microsoft.Practices.EnterpriseLibrary.Validation;

namespace TecnoPezWeb.Modules.Compras
{
    public partial class ABMGastos : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.Page.IsPostBack)
            {
                SetMode(PageMode.ListMode);
            }

            TPPTipoMoneda.ObjType = typeof(TipoMoneda);

            InicializarValidadores();
            InicializarGrilla();

            cmdEliminar.OnClientClick = "return confirm('Esta seguro de eliminar el registro?');";

            GenericMasterPage master = (GenericMasterPage)this.Master;
            master.Imagen = "../Styles/Icons/ic_historial_pagos.gif";
            master.Titulo = "Gestión de Gastos";
            cargarGrilla();
            _lblError.Text = "";
        }

        private void SetMode(PageMode mode)
        {
            ViewState["PageMode"] = mode;
            switch (mode)
            {
                case PageMode.ListMode:
                    wzrABM.ActiveStepIndex = 0;
                    CargarComboEmpleado();
                    break;
                case PageMode.NewMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtId.Enabled = false;
                    txtDescripcion.Enabled = true;
                    txtEmpleado.Enabled = false;
                    TPPTipoMoneda.Enable = true;
                    txtMonto.Enabled = true;
                    TPCFecha.Enabled = true;
                    cmdAceptar.Visible = true;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = false;
                    cmdEliminar.Enabled = false;
                    break;
                case PageMode.EditMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtId.Enabled = false;
                    txtDescripcion.Enabled = true;
                    txtEmpleado.Enabled = true;
                    TPPTipoMoneda.Enable = true;
                    txtMonto.Enabled = true;
                    TPCFecha.Enabled = true;
                    cmdAceptar.Visible = true;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = false;
                    cmdEliminar.Enabled = false;
                    break;
                case PageMode.ViewMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtId.Enabled = false;
                    txtDescripcion.Enabled = false;
                    txtEmpleado.Enabled = false;
                    TPPTipoMoneda.Enable = false;
                    txtMonto.Enabled = false;
                    TPCFecha.Enabled = false;
                    cmdAceptar.Visible = false;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = true;
                    cmdEliminar.Enabled = true;
                    break;
            }

        }

        private void CargarComboEmpleado()
        {
            ddlBuscarEmpleado.DataTextField = "APELLIDO";
            ddlBuscarEmpleado.DataValueField = "IDEMPLEADO";
            ddlBuscarEmpleado.DataSource = Empleado.getManager.GetAll();
            ddlBuscarEmpleado.DataBind();

            ListItem item = new ListItem();
            item.Text = "Seleccione...";
            item.Value = "-1";

            ddlBuscarEmpleado.Items.Insert(0, item);
        }

        private void cargarGrilla()
        {
            Gasto.getManager.ClearFilters();
            Gasto.getManager.ClearOrders();

            Gasto.getManager.AddFilter("DESCRIPCION", GenericManager<Gasto>.filterOperator.Like, "%" + this.txtBuscarDescripcion.Text + "%");
            if (ddlBuscarEmpleado.SelectedValue != "-1")
            {
                Gasto.getManager.AddFilter("EMPLEADO", GenericManager<Gasto>.filterOperator.Equals, ddlBuscarEmpleado.SelectedValue);
            }

            List<Gasto> lista = new List<Gasto>();
            lista = Gasto.getManager.GetFilter();
            grdGastos.grdDatosAbmView.DataSource = lista;
            grdGastos.grdDatosAbmView.DataBind();
        }

        private void InicializarValidadores()
        {
            PPVDescripcion.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Compras.Gasto";
            PPVDescripcion.ControlToValidate = "txtDescripcion";
            PPVDescripcion.PropertyName = "Descripcion";
            PPVDescripcion.DisplayMode = ValidationSummaryDisplayMode.List;

            PPVMoneda.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Compras.Gasto";
            PPVMoneda.ControlToValidate = "txtDescripcion";
            PPVMoneda.PropertyName = "TipoMoneda";
            PPVMoneda.DisplayMode = ValidationSummaryDisplayMode.List;

            PPVMonto.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Compras.Gasto";
            PPVMonto.ControlToValidate = "txtMonto";
            PPVMonto.PropertyName = "Monto";
            PPVMonto.DisplayMode = ValidationSummaryDisplayMode.List;
        }

        private void InicializarGrilla()
        {
            grdGastos.setupGrid<Gasto>(cargarGrilla, seleccionarGasto, null, true, this.ViewState);
        }

        private void seleccionarGasto(int o)
        {
            int IdGasto = int.Parse(grdGastos.grdDatosAbmView.DataKeys[o].Value.ToString());
            Gasto.getManager.ClearFilters();
            Gasto.getManager.AddFilter("IDGASTO", GenericManager<Gasto>.filterOperator.Equals, IdGasto);
            Gasto objGasto = Gasto.getManager.GetOne();
            txtId.Text = objGasto.IdGasto.ToString();
            txtDescripcion.Text = objGasto.Descripcion.Trim();
            txtEmpleado.Text = objGasto.Empleado.ToString();
            TPCFecha.Text = objGasto.Fecha.ToShortDateString();
            txtMonto.Text = objGasto.Monto.ToString();

            ViewState["Empleado"] = objGasto.Empleado;
            if (objGasto.TipoMoneda != null)
                TPPTipoMoneda.ItemSelected = objGasto.TipoMoneda;
            else
                TPPTipoMoneda.ItemSelected = null;

            SetMode(PageMode.ViewMode);
        }
        protected void cmdNuevo_Click(object sender, EventArgs e)
        {
            Empleado objEmpleado;
            objEmpleado = Functions.getEmpleadoLogueado(this.Page);
            txtEmpleado.Text = objEmpleado.ToString();
            ViewState["Empleado"] = objEmpleado;

            txtId.Text = "";
            txtMonto.Text = "";
            TPCFecha.Text = DateTime.Today.ToShortDateString();
            txtDescripcion.Text = "";
            TPPTipoMoneda.ItemSelected = Functions.getMonedaDefault();
            SetMode(PageMode.NewMode);
        }
        protected void cmdEditar_Click(object sender, EventArgs e)
        {
            SetMode(PageMode.EditMode);
        }
        protected void cmdEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                Gasto objGasto = new Gasto();

                objGasto.IdGasto = int.Parse(txtId.Text.ToUpper().Trim());
                if (Gasto.getManager.Delete(objGasto) < 1)
                {
                    throw Gasto.getManager.GeneratedException;
                }
                SetMode(PageMode.ListMode);
                cargarGrilla();
            }
            catch (Exception exc)
            {
                _lblError.Text = "error: No se pudo realizar la operación";
                Functions.LogError(exc);
                SetMode(PageMode.ListMode);
            }
        }
        protected void cmdAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                Gasto objGasto = new Gasto();
                objGasto.Descripcion = txtDescripcion.Text.Trim();

                DateTime datFecha;
                if (DateTime.TryParse(TPCFecha.Text.Trim(), out datFecha))
                    objGasto.Fecha = datFecha;
                else
                    objGasto.Fecha = DateTime.Today;

                decimal decMonto;
                if (decimal.TryParse(txtMonto.Text.Trim(), out decMonto))
                    objGasto.Monto = decMonto;

                if (TPPTipoMoneda.ItemSelected != null)
                {
                    TipoMoneda objTipo = new TipoMoneda();
                    objTipo = (TipoMoneda)TPPTipoMoneda.ItemSelected;
                    objGasto.TipoMoneda = objTipo;
                    objTipo = null;
                }

                objGasto.Empleado = (Empleado)ViewState["Empleado"];

                if (validar(objGasto))
                {
                    if (getMode() == PageMode.NewMode)
                    {
                        if (Gasto.getManager.Insert(objGasto) != true)
                        {
                            throw Gasto.getManager.GeneratedException;
                        }
                        SetMode(PageMode.ListMode);
                        cargarGrilla();
                    }
                    else
                    {
                        objGasto.IdGasto = int.Parse(txtId.Text.ToUpper().Trim());
                        if (Gasto.getManager.Update(objGasto) != true)
                        {
                            throw Gasto.getManager.GeneratedException;
                        }
                        SetMode(PageMode.ViewMode);
                    }
                }
            }
            catch (Exception exc)
            {
                _lblError.Text = "error: No se pudo realizar la operación";
                Functions.LogError(exc);
                SetMode(PageMode.NewMode);
            }
        }
        protected void cmdCancelar_Click(object sender, EventArgs e)
        {
            SetMode(PageMode.ListMode);
        }

        private PageMode getMode()
        {
            if (ViewState["PageMode"] == null)
                return PageMode.ModeNotFound;
            return (PageMode)ViewState["PageMode"];
        }

        private bool validar(Gasto objeto)
        {
            ValidationResults v = Validation.Validate<Gasto>(objeto);
            if (!v.IsValid)
            {
                _lblError.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
            }
            return v.IsValid;

        }
        protected void PPVMoneda_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
        {
            if (TPPTipoMoneda.ItemSelected == null)
                e.ConvertedValue = null;
            else
                e.ConvertedValue = TPPTipoMoneda.ItemSelected.ToString();
        }
        protected void PPVMonto_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
        {
            if (txtMonto.Text.Trim() == string.Empty)
                e.ConvertedValue = null;
            else
            {
                decimal decMonto;
                if (decimal.TryParse(txtMonto.Text.Trim(), out decMonto))
                {
                    if (decMonto <= 0)
                        e.ConvertedValue = null;
                    else
                        e.ConvertedValue = txtMonto.Text.Trim();
                }
                else
                    e.ConvertedValue = null;
            }
        }
}
}